﻿using AppForm_Managers.Object_Entities;
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Windows.Forms;

namespace AppForm_Managers.Views
{
    public partial class EmployeesInfoBasic : Form
    {
        public EmployeesInfoBasic()
        {
            InitializeComponent();
        }

        private void EmployeesInfoBasic_Load(object sender, EventArgs e)
        {
            AddButton.Enabled = true;
            UpdateButton.Enabled = false;
            DeleteButton.Enabled = false;

            ManagerComboProvinces_DataLoad();
            UseComboProvinces_DataLoad();
        }

        private void GridTempEmployees_Load(object sender, EventArgs e)
        {
            using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
            {
                GridTempEmployees.DataSource = db.View_TopEmployeesInfoBasicWhenCreateSuccess.ToList();
            }
        }

        private void ViewTempEmployees_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();
            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            try
            {
                List<int> listSelected = ViewTempEmployees.GetSelectedRows().ToList<int>();
                int index = -1;
                foreach (var item in listSelected)
                {
                    if (item > -1)
                    {
                        index = item;
                        break;
                    }
                }
                if (index > -1)
                {
                    UpdateButton.Enabled = true;
                    DeleteButton.Enabled = true;
                    AddButton.Enabled = false;

                    int empID = Int32.Parse(ViewTempEmployees.GetRowCellValue(index, "EmpID").ToString());
                    Employee emp = db.Employees.Single(em => em.EmpID == empID);

                    UseComboProvinces.SelectedValue = emp.Department1.Organization.Commune.District.ProvID;
                    UseComboDistricts.SelectedValue = emp.Department1.Organization.Commune.DistID;
                    UseComboCommunes.SelectedValue = emp.Department1.Organization.ComID;
                    UseComboOgrans.SelectedValue = emp.Department1.OrgID;
                    UseComboDeparts.SelectedValue = emp.Department1.DepID;

                    ManagerComboProvinces.SelectedValue = emp.Department.Organization.Commune.District.ProvID;
                    ManagerComboDistricts.SelectedValue = emp.Department.Organization.Commune.DistID;
                    ManagerComboCommunes.SelectedValue = emp.Department.Organization.ComID;
                    ManagerComboOgran.SelectedValue = emp.Department.OrgID;
                    ManagerComboDeparts.SelectedValue = emp.Department.DepID;

                    CodeEmpText.Text = emp.Code.Trim();
                    LastNameText.Text = emp.LastName.Trim();
                    FirstNameText.Text = emp.FirstName.Trim();
                    NameOtherText.Text = emp.NameOther.Trim();

                    EmailText.Text = emp.Email.Trim();
                    PhoneText.Text = emp.Telephone.Trim();
                    BirthdayText.Text = emp.DateOfBirth.ToString();
                    if (bool.Parse(emp.Gender.ToString()))
                        RadioMale.Checked = true;
                    else
                        RadioFemale.Checked = true;

                    EthnicText.Text = emp.Ethnic.Trim();
                    ReligionText.Text = emp.Religion.Trim();
                    CheckStatus.Checked = bool.Parse(emp.StatusOfEmp.ToString());

                    PlaceOfBirthText.Text = emp.PlaceOfBirth.Trim();
                    HomeTownText.Text = emp.HomeTown.Trim();
                    HouseHoldText.Text = emp.HouseHold.Trim();
                    CurrentAddressText.Text = emp.CurrentAddress.Trim();
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy quay lại sau", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void AvataImage_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog()
            {
                Filter = "Image Files (*.bmp, *.jpg,*.png)|*.bmp;*.jpg;*.png;*.jpeg"
            };

            if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string fileName = ofd.FileName;
            }
        }

        private void ManagerComboProvinces_DataLoad()
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    List<Province> list = new List<Province>();

                    Province temp = new Province()
                    {
                        ProvID = 0,
                        NameOfProvince = "Lựa chọn"
                    };
                    list.Add(temp);
                    list.AddRange(db.Provinces.ToList());

                    ManagerComboProvinces.DataSource = list;
                    ManagerComboProvinces.DisplayMember = "NameOfProvince";
                    ManagerComboProvinces.ValueMember = "ProvID";
                    ManagerComboProvinces.SelectedIndex = 0;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ManagerComboProvinces_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    District temp = new District()
                    {
                        DistID = 0,
                        NameOfDist = "Lựa chọn"
                    };

                    List<District> list = new List<District>();
                    list.Add(temp);

                    if (ManagerComboProvinces.SelectedIndex == 0)
                    {
                        ManagerComboDistricts.DataSource = list;
                        ManagerComboDistricts.ValueMember = "DistID";
                        ManagerComboDistricts.DisplayMember = "NameOfDist";
                        ManagerComboDistricts.SelectedIndex = 0;
                    }
                    else
                    {
                        int provinceID = int.Parse(ManagerComboProvinces.SelectedValue.ToString());
                        Province province = db.Provinces.SingleOrDefault(p => p.ProvID == provinceID);
                        list.AddRange(province.Districts.ToList());

                        ManagerComboDistricts.DataSource = list;
                        ManagerComboDistricts.ValueMember = "DistID";
                        ManagerComboDistricts.DisplayMember = "NameOfDist";
                        ManagerComboDistricts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ManagerComboDistricts_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Commune temp = new Commune()
                    {
                        ComID = 0,
                        NameOfComm = "Lựa chọn"
                    };

                    List<Commune> list = new List<Commune>();
                    list.Add(temp);

                    if (ManagerComboDistricts.SelectedIndex == 0)
                    {
                        ManagerComboCommunes.DataSource = list;
                        ManagerComboCommunes.ValueMember = "ComID";
                        ManagerComboCommunes.DisplayMember = "NameOfComm";
                        ManagerComboCommunes.SelectedIndex = 0;
                    }
                    else
                    {
                        int districtID = int.Parse(ManagerComboDistricts.SelectedValue.ToString());
                        District district = db.Districts.SingleOrDefault(p => p.DistID == districtID);
                        list.AddRange(district.Communes.ToList());

                        ManagerComboCommunes.DataSource = list;
                        ManagerComboCommunes.ValueMember = "ComID";
                        ManagerComboCommunes.DisplayMember = "NameOfComm";
                        ManagerComboCommunes.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ManagerComboCommunes_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Organization temp = new Organization()
                    {
                        OrgID = 0,
                        NameOfOrgan = "Lựa chọn"
                    };

                    List<Organization> list = new List<Organization>();
                    list.Add(temp);

                    if (ManagerComboCommunes.SelectedIndex == 0)
                    {
                        ManagerComboOgran.DataSource = list;
                        ManagerComboOgran.ValueMember = "OrgID";
                        ManagerComboOgran.DisplayMember = "NameOfOrgan";
                        ManagerComboOgran.SelectedIndex = 0;
                    }
                    else
                    {
                        int communeID = int.Parse(ManagerComboCommunes.SelectedValue.ToString());
                        Commune commune = db.Communes.SingleOrDefault(p => p.ComID == communeID);
                        list.AddRange(commune.Organizations.ToList());

                        ManagerComboOgran.DataSource = list;
                        ManagerComboOgran.ValueMember = "OrgID";
                        ManagerComboOgran.DisplayMember = "NameOfOrgan";
                        ManagerComboOgran.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void ManagerComboOgran_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Department temp = new Department()
                    {
                        DepID = 0,
                        NameOfDep = "Lựa chọn"
                    };

                    List<Department> list = new List<Department>();
                    list.Add(temp);

                    if (ManagerComboOgran.SelectedIndex == 0)
                    {
                        ManagerComboDeparts.DataSource = list;
                        ManagerComboDeparts.ValueMember = "DepID";
                        ManagerComboDeparts.DisplayMember = "NameOfDep";
                        ManagerComboDeparts.SelectedIndex = 0;
                    }
                    else
                    {
                        int organID = int.Parse(ManagerComboOgran.SelectedValue.ToString());
                        Organization organ = db.Organizations.SingleOrDefault(p => p.OrgID == organID);
                        list.AddRange(organ.Departments.ToList());

                        ManagerComboDeparts.DataSource = list;
                        ManagerComboDeparts.ValueMember = "DepID";
                        ManagerComboDeparts.DisplayMember = "NameOfDep";
                        ManagerComboDeparts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboProvinces_DataLoad()
        {
            try
            {
                UseComboProvinces.DataSource = null;
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    List<Province> list = new List<Province>();

                    Province temp = new Province()
                    {
                        ProvID = 0,
                        NameOfProvince = "Lựa chọn"
                    };

                    list.Add(temp);
                    list.AddRange(db.Provinces);

                    UseComboProvinces.DataSource = list;
                    UseComboProvinces.DisplayMember = "NameOfProvince";
                    UseComboProvinces.ValueMember = "ProvID";
                    UseComboProvinces.SelectedIndex = 0;
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboProvinces_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    District temp = new District()
                    {
                        DistID = 0,
                        NameOfDist = "Lựa chọn"
                    };

                    List<District> list = new List<District>();
                    list.Add(temp);

                    if (UseComboProvinces.SelectedIndex == 0)
                    {
                        UseComboDistricts.DataSource = list;
                        UseComboDistricts.ValueMember = "DistID";
                        UseComboDistricts.DisplayMember = "NameOfDist";
                        UseComboDistricts.SelectedIndex = 0;
                    }
                    else
                    {
                        int provinceID = int.Parse(UseComboProvinces.SelectedValue.ToString());
                        Province province = db.Provinces.SingleOrDefault(p => p.ProvID == provinceID);
                        list.AddRange(province.Districts.ToList());

                        UseComboDistricts.DataSource = list;
                        UseComboDistricts.ValueMember = "DistID";
                        UseComboDistricts.DisplayMember = "NameOfDist";
                        UseComboDistricts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboDistricts_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Commune temp = new Commune()
                    {
                        ComID = 0,
                        NameOfComm = "Lựa chọn"
                    };

                    List<Commune> list = new List<Commune>();
                    list.Add(temp);

                    if (UseComboDistricts.SelectedIndex == 0)
                    {
                        UseComboCommunes.DataSource = list;
                        UseComboCommunes.ValueMember = "ComID";
                        UseComboCommunes.DisplayMember = "NameOfComm";
                        UseComboCommunes.SelectedIndex = 0;
                    }
                    else
                    {
                        int districtID = int.Parse(UseComboDistricts.SelectedValue.ToString());
                        District district = db.Districts.SingleOrDefault(p => p.DistID == districtID);
                        list.AddRange(district.Communes.ToList());

                        UseComboCommunes.DataSource = list;
                        UseComboCommunes.ValueMember = "ComID";
                        UseComboCommunes.DisplayMember = "NameOfComm";
                        UseComboCommunes.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboCommunes_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Organization temp = new Organization()
                    {
                        OrgID = 0,
                        NameOfOrgan = "Lựa chọn"
                    };

                    List<Organization> list = new List<Organization>();
                    list.Add(temp);

                    if (UseComboCommunes.SelectedIndex == 0)
                    {
                        UseComboOgrans.DataSource = list;
                        UseComboOgrans.ValueMember = "OrgID";
                        UseComboOgrans.DisplayMember = "NameOfOrgan";
                        UseComboOgrans.SelectedIndex = 0;
                    }
                    else
                    {
                        int communeID = int.Parse(UseComboCommunes.SelectedValue.ToString());
                        Commune commune = db.Communes.SingleOrDefault(p => p.ComID == communeID);
                        list.AddRange(commune.Organizations.ToList());

                        UseComboOgrans.DataSource = list;
                        UseComboOgrans.ValueMember = "OrgID";
                        UseComboOgrans.DisplayMember = "NameOfOrgan";
                        UseComboOgrans.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void UseComboOgrans_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                using (ManagerEmployeesEntities db = new ManagerEmployeesEntities())
                {
                    Department temp = new Department()
                    {
                        DepID = 0,
                        NameOfDep = "Lựa chọn"
                    };

                    List<Department> list = new List<Department>();
                    list.Add(temp);

                    if (UseComboOgrans.SelectedIndex == 0)
                    {
                        UseComboDeparts.DataSource = list;
                        UseComboDeparts.ValueMember = "DepID";
                        UseComboDeparts.DisplayMember = "NameOfDep";
                        UseComboDeparts.SelectedIndex = 0;
                    }
                    else
                    {
                        int organID = int.Parse(UseComboOgrans.SelectedValue.ToString());
                        Organization organ = db.Organizations.SingleOrDefault(p => p.OrgID == organID);
                        list.AddRange(organ.Departments.ToList());

                        UseComboDeparts.DataSource = list;
                        UseComboDeparts.ValueMember = "DepID";
                        UseComboDeparts.DisplayMember = "NameOfDep";
                        UseComboDeparts.SelectedIndex = 0;
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }

        private void Controls_Reset()
        {
            ManagerComboProvinces.SelectedIndex = 0;
            UseComboProvinces.SelectedIndex = 0;
            CodeEmpText.Text = "";
            FirstNameText.Text = "";
            LastNameText.Text = "";
            NameOtherText.Text = "";
            EmailText.Text = "";
            PhoneText.Text = "";
            BirthdayText.Text = "";
            EthnicText.Text = "";
            ReligionText.Text = "";
            PlaceOfBirthText.Text = "";
            HomeTownText.Text = "";
            HouseHoldText.Text = "";
            CurrentAddressText.Text = "";
            CheckStatus.Checked = false;
            RadioMale.Checked = true;
        }

        private void AddButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();

            if (ManagerComboDeparts.SelectedIndex == 0)
            {
                ErrorProvider.SetError(ManagerComboDeparts, "Hãy chọn cơ quan, đơn vị quản lý cán bộ nhân viên");
                ManagerComboDeparts.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (UseComboDeparts.SelectedIndex == 0)
            {
                ErrorProvider.SetError(UseComboDeparts, "Hãy chọn cơ quan, đơn vị cán bộ nhân viên làm việc");
                UseComboDeparts.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CodeEmpText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CodeEmpText, "Mã nhân viên không được để trống");
                CodeEmpText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (FirstNameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(FirstNameText, "Họ và tên đệm nhân viên không được để trống");
                FirstNameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (LastNameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(LastNameText, "Tên nhân viên không được để trống");
                LastNameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (NameOtherText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameOtherText, "Tên khác của nhân viên không được để trống");
                NameOtherText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            // Check Email
            if (EmailText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(EmailText, "Email của nhân viên không được để trống");
                EmailText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (UltisCode.CheckEmail(EmailText.Text.Trim()))
                ErrorProvider.Dispose();
            else
            {
                ErrorProvider.SetError(EmailText, "Email của nhân viên không đúng định dạng. Ex: xuandt76@gmail.com");
                EmailText.Focus();
                return;
            }

            if (PhoneText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(PhoneText, "Số điện thoại của nhân viên không được để trống");
                PhoneText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (BirthdayText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(BirthdayText, "Ngày sinh của nhân viên không được để trống");
                BirthdayText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (EthnicText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(EthnicText, "Dân tộc của nhân viên không được để trống");
                EthnicText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (ReligionText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(ReligionText, "Tôn giáo của nhân viên không được để trống");
                ReligionText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (PlaceOfBirthText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(PlaceOfBirthText, "Nơi sinh của nhân viên không được để trống");
                PlaceOfBirthText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (HomeTownText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(HomeTownText, "Quê quán của nhân viên không được để trống");
                HomeTownText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (HouseHoldText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(HouseHoldText, "Hộ khẩu thường trú của nhân viên không được để trống");
                HouseHoldText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CurrentAddressText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CurrentAddressText, "Chổ ở hiện nay của nhân viên không được để trống");
                CurrentAddressText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            ManagerEmployeesEntities db = new ManagerEmployeesEntities();

            try
            {
                Employee emp = new Employee()
                {
                    Code = CodeEmpText.Text.Trim(),
                    FirstName = FirstNameText.Text.Trim(),
                    LastName = LastNameText.Text.Trim(),
                    NameOther = NameOtherText.Text.Trim(),
                    Email = EmailText.Text.Trim(),
                    Telephone = PhoneText.Text.Trim(),
                    DateOfBirth = DateTime.Parse(BirthdayText.Text.Trim()),
                    Ethnic = EthnicText.Text.Trim(),
                    Religion = ReligionText.Text.Trim(),
                    PlaceOfBirth = PlaceOfBirthText.Text.Trim(),
                    HomeTown = HomeTownText.Text.Trim(),
                    HouseHold = HouseHoldText.Text.Trim(),
                    CurrentAddress = CurrentAddressText.Text.Trim(),
                    StatusOfEmp = CheckStatus.Checked,
                    AvatarUrl = ""
                };
                if (RadioMale.Checked)
                    emp.Gender = true;
                else
                    emp.Gender = false;
                emp.DepManagerID = Int32.Parse(ManagerComboDeparts.SelectedValue.ToString());
                emp.DepUsingID = Int32.Parse(UseComboDeparts.SelectedValue.ToString());

                // Add new employee
                db.Employees.Add(emp);


                // Add profile for employee new
                Profile profile = new Profile()
                {
                    EmpID = emp.EmpID
                };
                db.Profiles.Add(profile);

                db.SaveChanges();

                ErrorProvider.Dispose();
                Controls_Reset();
                GridTempEmployees_Load(sender, e);

                EmployeesInfoBasic appear = new EmployeesInfoBasic();
                AlertControl.Show(appear, "Hệ thống thông báo", "Thêm mới nhân viên thành công");
                //MessageBox.Show("Thêm mới nhân viên thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void UpdateButton_Click(object sender, EventArgs e)
        {
            ErrorProvider.Dispose();
            if (ManagerComboDeparts.SelectedIndex == 0)
            {
                ErrorProvider.SetError(ManagerComboDeparts, "Hãy chọn cơ quan, đơn vị quản lý cán bộ nhân viên");
                ManagerComboDeparts.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (UseComboDeparts.SelectedIndex == 0)
            {
                ErrorProvider.SetError(UseComboDeparts, "Hãy chọn cơ quan, đơn vị cán bộ nhân viên làm việc");
                UseComboDeparts.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CodeEmpText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CodeEmpText, "Mã nhân viên không được để trống");
                CodeEmpText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (FirstNameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(FirstNameText, "Họ và tên đệm nhân viên không được để trống");
                FirstNameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (LastNameText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(LastNameText, "Tên nhân viên không được để trống");
                LastNameText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (NameOtherText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(NameOtherText, "Tên khác của nhân viên không được để trống");
                NameOtherText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            // Email Check
            if (EmailText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(EmailText, "Email của nhân viên không được để trống");
                EmailText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (UltisCode.CheckEmail(EmailText.Text.Trim())) ErrorProvider.Dispose();
            else
            {
                ErrorProvider.SetError(EmailText, "Định dạng email không đúng (Ex: xuandt76@gmail.com)");
                EmailText.Focus();
                return;
            }

            // Phone check
            if (PhoneText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(PhoneText, "Số điện thoại của nhân viên không được để trống");
                PhoneText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (BirthdayText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(BirthdayText, "Ngày sinh của nhân viên không được để trống");
                BirthdayText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (EthnicText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(EthnicText, "Dân tộc của nhân viên không được để trống");
                EthnicText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (ReligionText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(ReligionText, "Tôn giáo của nhân viên không được để trống");
                ReligionText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();


            if (PlaceOfBirthText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(PlaceOfBirthText, "Nơi sinh của nhân viên không được để trống");
                PlaceOfBirthText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (HomeTownText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(HomeTownText, "Quê quán của nhân viên không được để trống");
                HomeTownText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (HouseHoldText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(HouseHoldText, "Hộ khẩu thường trú của nhân viên không được để trống");
                HouseHoldText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            if (CurrentAddressText.Text.Trim().Length == 0)
            {
                ErrorProvider.SetError(CurrentAddressText, "Chổ ở hiện nay của nhân viên không được để trống");
                CurrentAddressText.Focus();
                return;
            }
            else
                ErrorProvider.Dispose();

            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            try
            {
                int empId = 0;
                List<int> listSelected = ViewTempEmployees.GetSelectedRows().ToList<int>();
                int index = -1;
                foreach (var item in listSelected)
                {
                    if (item > -1)
                    {
                        index = item;
                        break;
                    }
                }
                empId = Int32.Parse(ViewTempEmployees.GetRowCellValue(index, "EmpID").ToString());
                Employee emp = db.Employees.Single(em => em.EmpID == empId);

                emp.Code = CodeEmpText.Text.Trim();
                emp.FirstName = FirstNameText.Text.Trim();
                emp.LastName = LastNameText.Text.Trim();
                emp.NameOther = NameOtherText.Text.Trim();
                emp.Email = EmailText.Text.Trim();
                emp.Telephone = PhoneText.Text.Trim();
                emp.DateOfBirth = DateTime.Parse(BirthdayText.Text.Trim());
                emp.Ethnic = EthnicText.Text.Trim();
                emp.Religion = ReligionText.Text.Trim();
                emp.PlaceOfBirth = PlaceOfBirthText.Text.Trim();
                emp.HomeTown = HomeTownText.Text.Trim();
                emp.HouseHold = HouseHoldText.Text.Trim();
                emp.CurrentAddress = CurrentAddressText.Text.Trim();
                emp.StatusOfEmp = CheckStatus.Checked;

                if (RadioMale.Checked)
                    emp.Gender = true;
                else
                    emp.Gender = false;
                emp.DepManagerID = Int32.Parse(ManagerComboDeparts.SelectedValue.ToString());
                emp.DepUsingID = Int32.Parse(UseComboDeparts.SelectedValue.ToString());

                if (MessageBox.Show("Bạn muốn cập nhật thông tin của cán bộ nhân viên đã chọn", "Cập nhật thông tin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    db.SaveChanges();

                    ErrorProvider.Dispose();
                    Controls_Reset();
                    AddButton.Enabled = true;
                    UpdateButton.Enabled = false;
                    DeleteButton.Enabled = false;
                    GridTempEmployees_Load(sender, e);

                    EmployeesInfoBasic appear = new EmployeesInfoBasic();
                    AlertControl.Show(appear, "Hệ thống thông báo", "Cập nhật thông tin nhân viên thành công");
                    //MessageBox.Show("Cập nhật thông tin nhân viên thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void DeleteButton_Click(object sender, EventArgs e)
        {
            ManagerEmployeesEntities db = new ManagerEmployeesEntities();
            try
            {
                int empId = 0;
                List<int> listSelected = ViewTempEmployees.GetSelectedRows().ToList<int>();
                int index = -1;
                foreach (var item in listSelected)
                {
                    if (item > -1)
                    {
                        index = item;
                        break;
                    }
                }

                empId = Int32.Parse(ViewTempEmployees.GetRowCellValue(index, "EmpID").ToString());

                Employee emp = db.Employees.Single(em => em.EmpID == empId);
                db.Employees.Remove(emp);
                DialogResult show = MessageBox.Show("Bạn có muốn nhân viên đã chọn", "Xóa chức vụ", MessageBoxButtons.YesNo, MessageBoxIcon.Stop);
                if (show == DialogResult.Yes)
                {
                    db.SaveChanges();

                    ErrorProvider.Dispose();
                    Controls_Reset();
                    AddButton.Enabled = true;
                    UpdateButton.Enabled = false;
                    DeleteButton.Enabled = false;
                    GridTempEmployees_Load(sender, e);

                    EmployeesInfoBasic appear = new EmployeesInfoBasic();
                    AlertControl.Show(appear, "Hệ thống thông báo", "Xóa thông tin nhân viên thành công");
                    //MessageBox.Show("Xóa nhân viên thành công", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hệ thống đang bận, hãy thử lại sau.", "Hệ thống thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                db.Dispose();
            }
        }

        private void CancelsButton_Click(object sender, EventArgs e)
        {
            DialogResult result = MessageBox.Show("Bạn có muốn hủy bỏ thao tác đã chọn và làm mới", "Hủy bỏ thao tác", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {
                AddButton.Enabled = true;
                UpdateButton.Enabled = false;
                DeleteButton.Enabled = false;

                Controls_Reset();
                GridTempEmployees_Load(sender, e);
            }
        }
    }
}